package com.itheima.reggie.service.impl;

import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itheima.reggie.common.Constant;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.domain.Category;
import com.itheima.reggie.domain.Employee;
import com.itheima.reggie.mapper.EmployeeMapper;
import com.itheima.reggie.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service//EmployeeServiceImpl放入容器中
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;
    @Override
    public ResultInfo login(String username, String password) {
        //1.通过用户名查找用户
        Employee employee =  employeeMapper.findByUserName(username);
        //2.判断用户是否为空
        if (employee==null){
            //如果为空返回，msg=用户名不存在的ResultInfo对象
            return ResultInfo.error("用户名不存在");
        }
        //3.如果用户名不为空，即用户存在，再进行密码的判断
        //3.1将参数密码进行相应加密处理
        String passWordByMd5 = SecureUtil.md5(password);
        //3.2进行对比
        if (!passWordByMd5.equals(employee.getPassword())){
            //如果密码不同。则返回msg=密码错误的ResultInfo对象
            return ResultInfo.error("密码错误");
        }
        //4.判断用户状态是否正常
        if (employee.getStatus() != 1){
            return ResultInfo.error("用户未激活");
        }

        return ResultInfo.success(employee);
    }

    @Override
    public List<Employee> findByName(String name) {
        return employeeMapper.findByName(name);
    }

    //保存
    @Override
    public void addEmployee(Employee employee) {
        //1.补齐参数
        //获取唯一的主键值 雪花算法
        long id = IdUtil.createSnowflake(1, 1).nextId();
        //设置新增员工id
        employee.setId(id);

        //设置默认密码,后台生成默认 密码 密码需要先加密
        String password = SecureUtil.md5(Constant.INIT_PASSWORD);
        employee.setPassword(password);

        //设置员工激活状态
        employee.setStatus(Employee.STATUS_ENABLE);

//        //设置创建时间和修改时间,第一次添加肯定创建和修改时间一致
//        Date date = new Date();
//        employee.setCreateTime(date);
//        employee.setUpdateTime(date);
//        //获取创建和修改者id
//        employee.setCreateUser(1L);
//        employee.setUpdateUser(1L);

        //保存employee对象
        employeeMapper.addEmployee(employee);
    }

    @Override
    public Employee findById(Long id) {
        Employee employee = employeeMapper.findById(id);
        return employee;
    }

    @Override
    public void putEmployee(Employee employee) {
//        //设置两个字段
//        employee.setUpdateTime(new Date());
//        employee.setUpdateUser(1L);
        //调用方法更新
        employeeMapper.updateEmployee(employee);
    }

}
